/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.padrao.presenter;

import br.com.webhomesites.locacao.presenter.LocacaoPresenter;
import br.com.webhomesites.padrao.model.BuscarGrupoProdutoModel;
import br.com.webhomesites.padrao.model.GrupoProdutoDAO;
import br.com.webhomesites.padrao.model.GrupoProdutoModel;
import br.com.webhomesites.padrao.utils.Strategy;
import br.com.webhomesites.padrao.view.BuscarGrupoProdutoView;
import java.text.DecimalFormat;

/**
 *
 * @author Webhome
 */
public class BuscarGrupoProdutoPresenter {

    GrupoProdutoPresenter grupoProdutoPresenter;
    LocacaoPresenter locacaoPresenter;
        
    GrupoProdutoModel grupoProdutoModel = new GrupoProdutoModel();
    GrupoProdutoDAO grupoProdutoDAO = new GrupoProdutoDAO();
    
    BuscarGrupoProdutoView buscarGrupoProdutoView;
    BuscarGrupoProdutoModel buscarGrupoProdutoModel;
       
    public final Strategy BUSCAR_STRATEGY = new BuscarStrategy();
    
    public final Strategy POR_CODIGO_STRATEGY = new CodigoStrategy();
    public final Strategy POR_DESCRICAO_STRATEGY = new DescricaoStrategy();
        
    public final Strategy BUSCADOR_GRUPO_PRODUTO_VIEW = new GrupoProdutoViewStrategy();
                
    private Strategy operacao = BUSCAR_STRATEGY;
    private Strategy tipoBusca;
    private Strategy buscador;
    
    DecimalFormat df = new DecimalFormat("###,###,###.00");
    DecimalFormat df2 = new DecimalFormat("###,###,###.0");
   
    public BuscarGrupoProdutoPresenter(GrupoProdutoPresenter grupoProdutoPresenter, BuscarGrupoProdutoView buscarGrupoProdutoView, BuscarGrupoProdutoModel buscarGrupoProdutoModel) {
        this.grupoProdutoPresenter = grupoProdutoPresenter;
        this.buscarGrupoProdutoModel = buscarGrupoProdutoModel;
        this.buscarGrupoProdutoView = buscarGrupoProdutoView;
            
    }
    
    public BuscarGrupoProdutoPresenter() {
        
    }

    public void setUpViewListeners() {
        buscarGrupoProdutoView.setBtnBuscarActionListener(new BuscarGrupoProdutoPresenterActionListeners.BuscarActionListener(this));
        buscarGrupoProdutoView.setCodigoFocusListener(new BuscarGrupoProdutoPresenterActionListeners.BuscarFocusListener(this));
        buscarGrupoProdutoView.setDescricaoFocusListener(new BuscarGrupoProdutoPresenterActionListeners.BuscarFocusListener(this));
        
    }

    public void updateModelFromView() {
        buscarGrupoProdutoModel.setCodigo(buscarGrupoProdutoView.getComboCodigo());
        buscarGrupoProdutoModel.setDescricao(buscarGrupoProdutoView.getComboDescricao());
    }

    public void updateViewFromModel() {
        if (buscarGrupoProdutoModel != null) {
            buscarGrupoProdutoView.setComboCodigo(Long.toString(buscarGrupoProdutoModel.getCodigo()));
            buscarGrupoProdutoView.setComboDescricao(buscarGrupoProdutoModel.getDescricao());
          } else {
            //buscarGrupoProdutoView.clearFields();
        }
    }

    public void novoBuscarGrupoProduto() {
        getTipoBusca().execute();
        //buscarGrupoProdutoModel = new DevolucaoTotComPagModel();
        System.out.println("Executando a busca");
        //updateModelLocacaoFromDTCPV();
//        List<UsuarioModel> usuarios = usuarioDAO.findAll();
//        for(UsuarioModel pessoa : usuarios){
//            System.out.println("Pessoa: " + pessoa.getNome());
//        }
//        System.out.println("----------------------------------");
//        usuarios = usuarioDAO.findByNome("hernane");
//        for(UsuarioModel pessoa : usuarios){
//            System.out.println("Pessoa: " + pessoa.getNome());
//        }
    }

    public void habilitarEdicao(boolean arg) {
//        buscarGrupoProdutoView.enableTxtValorTotalLocacao(arg);
//        buscarGrupoProdutoView.enableTxtValorDesconto(arg);
//        buscarGrupoProdutoView.enableTxtValorTotalPagar(arg);
//
//        buscarGrupoProdutoView.enableBtnCancelar(arg);
//        buscarGrupoProdutoView.enableBtnConfirmar(arg);
//        buscarGrupoProdutoView.enableBtnRecibo(arg);
    }
    
    public BuscarGrupoProdutoView getBuscarGrupoProdutoView() {
        return buscarGrupoProdutoView;
    }
    
    public BuscarGrupoProdutoModel getBuscarGrupoProdutoModel() {
        return buscarGrupoProdutoModel;
    }

    public void setBuscarGrupoProdutoView(BuscarGrupoProdutoView buscarGrupoProdutoView) {
        this.buscarGrupoProdutoView = buscarGrupoProdutoView;
    }

    public void setBuscarProdutoModel(BuscarGrupoProdutoModel buscarGrupoProdutoModel) {
        this.buscarGrupoProdutoModel = buscarGrupoProdutoModel;
    }
    
    public GrupoProdutoPresenter getProdutoPresenter() {
        return grupoProdutoPresenter;
    }

    public void createView() {

        this.setUpViewListeners();
        this.habilitarEdicao(true);
        buscarGrupoProdutoView.packAndShow();
    }

    public void setOperacao(Strategy operacao) {
        this.operacao = operacao;
    }

    public Strategy getOperacao() {
        return operacao;
    }

    public Strategy getTipoBusca() {
        return tipoBusca;
    }

    public void setTipoBusca(Strategy tipoBusca) {
        this.tipoBusca = tipoBusca;
    }

    public Strategy getBuscador() {
        return buscador;
    }

    public void setBuscador(Strategy buscador) {
        this.buscador = buscador;
    }   

    private class BuscarStrategy implements Strategy {

        @Override
        public void execute() {            
            novoBuscarGrupoProduto();
        }
    }
    
    private class CodigoStrategy implements Strategy {

        @Override
        public void execute() {       
            grupoProdutoModel = grupoProdutoDAO.getById(buscarGrupoProdutoView.getComboCodigo());
            getBuscador().execute();
        }
    }
    
    private class DescricaoStrategy implements Strategy {

        @Override
        public void execute() {             
            grupoProdutoModel = grupoProdutoDAO.findByDescricaoUnica(buscarGrupoProdutoView.getComboDescricao());
            getBuscador().execute();
        }
    }
 
    private class GrupoProdutoViewStrategy implements Strategy {

        @Override
        public void execute() {               
            grupoProdutoPresenter.setOperacao(grupoProdutoPresenter.UPDATE_STRATEGY);
            grupoProdutoPresenter.setModel(grupoProdutoModel);
            grupoProdutoPresenter.updateViewFromModel();
        }
    }
}
